05. 条件布尔表达式
L3 04a 复杂的布尔表达式 V3
复杂的布尔表达式
If
语句有时候会使用更加复杂的条件布尔表达式。可能包括多个比较运算符、逻辑运算符,甚至包括算式。例如:
if 18.5 <= weight / height**2 < 25:
print("BMI is considered 'normal'")
if is_raining and is_sunny:
print("Is there a rainbow?")
if (not unsubscribed) and (location == "USA" or location == "CAN"):
print("send email")
对于非常复杂的条件,你可能需要结合使用
and
、
or
和
not
。使用括号可以使运算符组合更清晰。
无论是简单还是复杂的条件,
if
语句中的条件都必须是结果为 True 或 False 的布尔表达式,该值决定了
if
语句中的缩进代码块是否执行。
L3 04b 正反面示例 V3
正反面示例
在为
if
语句编写布尔表达式时,需要注意以下几个事项。
1. 请勿使用
True
或
False
作为条件
# Bad example
if True:
print("This indented code will always get run.")
虽然“True”是一个有效的布尔表达式,但不是有用的条件,因为它始终为 True,因此缩进代码将始终运行。同样,
if False
也不应使用,该
if
语句之后的语句将从不运行。
# Another bad example
if is_cold or not is_cold:
print("This indented code will always get run.")
同样,使用你知道将始终结果为 True 的条件(例如上述示例)也是毫无用途的。布尔表达式只能为 True 或 False,因此
is_cold
或
not is_cold
将始终为 True,缩进代码将始终运行。
2. 在使用逻辑运算符编写表达式时,要谨慎
逻辑运算符
and
、
or
和
not
具有特定的含义,与字面英文意思不太一样。确保布尔表达式的结果和你预期的一样。
# Bad example
if weather == "snow" or "rain":
print("Wear boots!")
这段代码在 Python 中是有效的,但不是布尔表达式,虽然读起来像。原因是
or
运算符右侧的表达式
"rain"
不是布尔表达式,它是一个字符串。稍后我们将讨论当你使用非布尔型对象替换布尔表达式时,会发生什么。
3. 请勿使用
== True
或
== False
比较布尔变量
这种比较没必要,因为布尔变量本身是布尔表达式。
# Bad example
if is_cold == True:
print("The weather is cold!")
这是一个有效的条件,但是我们可以使用变量本身作为条件,使代码更容易读懂,如下所示。
# Good example
if is_cold:
print("The weather is cold!")
如果你想检查布尔表达式是否为 False,可以使用
not
运算符。
L3 04c 真假值测试 V3
真假值测试
如果我们在
if
语句中使用非布尔对象代替布尔表达式,Python 将检查其真假值,判断是否运行缩进代码。默认情况下,Python 中对象的真假值被视为 True,除非在文档中被指定为 False。
以下是在 Python 中被视为 False 的大多数内置对象:
-
定义为 false 的常量:
None
和False
-
任何数字类型的零:
0
、0.0
、0j
、Decimal(0)
、Fraction(0, 1)
-
空序列和空集合:
””
、()
、[]
、{}
、set()
、range(0)
示例:
errors = 3
if errors:
print("You have {} errors to fix!".format(errors))
else:
print("No errors to fix!")
在上述代码中,errors 的真假值为 True,因为它是非零数字,因此输出了错误消息。这是一个编写
if
语句的简练方式。